package cn.signalpha.common.dto;

import cn.signalpha.modules.com.entity.User;
import cn.signalpha.modules.shop.entity.Coupon;
import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * 业务配置类
 *
 * @author suguangjun
 */
@Data
public class ConfigDTO implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 公众号配置
	 * 验证地址：域名地址/wx/portal/{appid}
	 */
	@Data
	public static class WxMpDTO implements Serializable {
		private static final long serialVersionUID = 1L;
		/**
		 * 微信公众号的appid
		 */
		private String appId;
		/**
		 * 微信公众号的appSecret
		 */
		private String secret;
		/**
		 * 微信公众号的token
		 */
		private String token;
		/**
		 * 微信公众号的EncodingAESKey
		 */
		private String aesKey;
		/**
		 * 消息加密方式：1明文 2兼容 3安全
		 */
		private Integer encryptType;
	}

	/**
	 * 小程序配置
	 */
	@Data
	public static class WxMaDTO implements Serializable {
		private static final long serialVersionUID = 1L;
		/**
		 * 微信小程序的appid
		 */
		private String appId;
		/**
		 * 微信小程序的appSecret
		 */
		private String secret;
		/**
		 * 微信小程序消息服务器配置的token
		 */
		private String token;
		/**
		 * 微信小程序消息服务器配置的EncodingAESKey
		 */
		private String aesKey;
		/**
		 * 消息格式，XML或者JSON
		 */
		private String msgDataFormat;
	}

	/**
	 * 微信支付配置
	 */
	@Data
	public static class WxPayDTO implements Serializable {
		private static final long serialVersionUID = 1L;
		/**
		 * 类型：v2 v3
		 */
		private String type;
		/**
		 * v2 v3
		 * appId
		 */
		private String appId;
		/**
		 * v2 v3
		 * 商户号
		 */
		private String mchId;
		/**
		 * v2
		 * 商户平台「API安全」中的 APIv2 密钥
		 */
		private String apiKey2;
		/**
		 * v3
		 * 商户平台「API安全」中的 APIv3 密钥
		 */
		private String apiKey3;
		/**
		 * v3
		 * 证书序列号
		 * 「商户API证书」的「证书序列号」，可以在证书管理里面查看
		 */
		private String serialNo;
		/**
		 * v2 v3
		 * 微信支付p12证书
		 * 在微信商家平台中可以下载！文件名一般为apiclient_cert.p12
		 */
		private String certP12Path;
		/**
		 * v3
		 * 微信支付证书密钥
		 * 在微信商家平台中可以下载！文件名一般为apiclient_key.pem
		 */
		private String keyPath;
		/**
		 * v3
		 * 微信支付证书
		 * 在微信商家平台中可以下载！文件名一般为apiclient_cert.pem
		 */
		private String certPath;
		/**
		 * v3
		 * 微信平台证书
		 * 通过平台工具生成：https://pay.weixin.qq.com/docs/merchant/sdk-tools/platform-certificate-tool.html
		 * 生成证书命令
		 * 	java -jar .\CertificateDownloader.jar -k WKekTtqHYqRkBSy3Jq8tC9FlUYP2YqAG -m 1626718974 -f D:\cert\apiclient_key.pem -s 6A971EDCA19C70DE84F0CACC70A65E308CA7B886 -o D:\cert\
		 * 	-k apiV3密钥
		 * 	-m 商户号
		 * 	-f 微信支付证书密钥文件位置 keyPath
		 * 	-s 证书序列号 serialNo
		 * 	-0 生成证书输出位置
		 */
		private String platformCertPath;
		/**
		 * v2 v3
		 * 应用域名，回调中会使用此参数
		 */
		private String domain;
	}

	/**
	 * 支付宝支付配置
	 */
	@Data
	public static class AliPayDTO implements Serializable {
		private static final long serialVersionUID = 1L;
		/**
		 * 应用appId
		 */
		private String appId;
		/**
		 * 支付宝公钥
		 */
		private String publicKey;
		/**
		 * 支付宝应用私钥
		 */
		private String privateKey;
		/**
		 * 应用域名
		 */
		private String domain;
	}

	/**
	 * 汇聚支付配置
	 */
	@Data
	public static class JoinPayDTO implements Serializable {
		private static final long serialVersionUID = 1L;
		/**
		 * 商户编号
		 */
		private String merchantNo;
		/**
		 * 商户报备编号
		 */
		private String tradeMerchantNo;
		/**
		 * MD5密钥
		 */
		private String md5;
		/**
		 * appId
		 */
		private String appId;
		/**
		 * 快捷支付 AES key
		 */
		private String aesKey;
		/**
		 * 快捷支付 应用公钥
		 */
		private String publicKey;
		/**
		 * 快捷支付 应用私钥
		 */
		private String privateKey;
		/**
		 * 快捷支付 汇聚平台公钥
		 */
		private String publicJoinKey;
		/**
		 * 应用域名
		 */
		protected String domain;
	}

	/**
	 * 拉卡拉支付配置
	 */
	@Data
	public static class LklPayDTO implements Serializable {
		private static final long serialVersionUID = 1L;
		/**
		 * 拉卡拉分配的商户号
		 */
		protected String merchantNo;
		/**
		 * 拉卡拉分配的终端号
		 */
		protected String termNo;
		/**
		 * 拉卡拉appId
		 */
		protected String appId;
		/**
		 * 商户证书序列号
		 */
		protected String serialNo;
		/**
		 * 商户私钥信息地址
		 */
		protected String priKey;
		/**
		 * 拉卡拉支付平台证书(用于拉卡拉响应验签)
		 */
		protected String lklCer;
		/**
		 * 拉卡拉支付平台证书2(用于拉卡拉通知推送验签)
		 */
		protected String lklNotifyCer;
		/**
		 * 拉卡拉报文加密对称性密钥
		 */
		protected String sm4Key;
		/**
		 * API服务地址
		 */
		protected String serverUrl;
		/**
		 * 应用域名
		 */
		protected String domain;
	}

	/**
	 * 商城配置
	 */
	@Data
	public static class ShopDTO implements Serializable {
		private static final long serialVersionUID = 1L;
		/**
		 * 未支付订单多少小时自动关闭
		 */
		private Integer close;
		/**
		 * 已发货订单多少天自动确认收货
		 */
		private Integer finish;
		/**
		 * 已收货订单多少天关闭售后
		 */
		private Integer refund;
		/**
		 * 是否开启积分抵扣
		 */
		private Integer isOpenIntegral;
		/**
		 * 积分最小抵扣单位
		 */
		private Integer integralUnit;
		/**
		 * 积分每单位可抵扣多少钱
		 */
		private Integer integralMoney;
		/**
		 * 实付X元，奖励X积分
		 */
		private Integer integralPayMoney;
		/**
		 * 实付X元，奖励X积分
		 */
		private Integer integralAward;
	}

	/**
	 * 提现配置
	 */
	@Data
	public static class WithdrawDTO implements Serializable {
		private static final long serialVersionUID = 1L;

		/**
		 * 提现开关 0关 1开
		 */
		private Integer onOff;

		/**
		 * 最低提现金额
		 */
		private Double min;

		/**
		 * 最大提现金额
		 */
		private Double max;

		/**
		 * 扣除比例
		 */
		private Double subRatio;
	}

	/**
	 * 签到配置
	 */
	@Data
	public static class SignInDTO implements Serializable {
		private static final long serialVersionUID = 1L;
		/**
		 * 是否赠送经验
		 */
		private Integer isExp;
		/**
		 * 赠送经验
		 */
		private Integer exp;
		/**
		 * 是否赠送积分
		 */
		private Integer isIntegral;
		/**
		 * 赠送积分
		 */
		private Double integral;
		/**
		 * 每月补签次数
		 */
		private Integer replenishNum;
		/**
		 * 连续签到配置
		 */
		private List<SignInSeriesDTO> seriesList;
	}
	/**
	 * 连续签到配置
	 */
	@Data
	public static class SignInSeriesDTO implements Serializable {
		private static final long serialVersionUID = 1L;
		/**
		 * 签到天数
		 */
		private Integer day;
		/**
		 * 是否赠送经验
		 */
		private Integer isExp;
		/**
		 * 赠送经验
		 */
		private Integer exp;
		/**
		 * 是否赠送积分
		 */
		private Integer isIntegral;
		/**
		 * 赠送积分
		 */
		private Double integral;
		/**
		 * 图标
		 */
		private String icon;
		/**
		 * 文案
		 */
		private String remark;
	}

	/**
	 * 社区配置
	 */
	@Data
	public static class SocialDTO implements Serializable {
		private static final long serialVersionUID = 1L;
		/**
		 * 作品审核开关
		 */
		private Integer isTopicAudit;
		/**
		 * 发布评论开关
		 */
		private Integer isTopicComment;
		/**
		 * 评论审核开关
		 */
		private Integer isTopicCommentAudit;
		/**
		 * 发布获得经验值
		 */
		private Integer exp;
		/**
		 * 每天获得经验上限
		 */
		private Integer expNum;
	}

	/**
	 * 优惠券赠送配置
	 */
	@Data
	public static class CouponDTO implements Serializable {
		private static final long serialVersionUID = 1L;
		/**
		 * 弹窗封面
		 */
		private String img;
		/**
		 * 优惠券列表
		 */
		private List<Coupon> couponList;
	}

	/**
	 * 超级核销员
	 */
	@Data
	public static class VerifyUserDTO implements Serializable {
		private static final long serialVersionUID = 1L;
		/**
		 * 用户列表
		 */
		private List<User> list;
	}

	/**
	 * 同城配送配置
	 */
	@Data
	public static class CityDeliveryDTO implements Serializable {
		private static final long serialVersionUID = 1L;
		/**
		 * appId
		 */
		private String appId;
		/**
		 * appSecret
		 */
		private String appSecret;
		/**
		 * 请求域名
		 */
		private String domain;
	}

}
